<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style>
			pre {
				font-size: 18px;
			}
		</style>
	</head>
	<body>
		<pre>
我们还可以通过构造函数的方法来创建对象。
为了能使用该函数来创建对象，我们需要使用new操作符。
使用构造器函数的好处在于，它可以在创建对象时接收一些参数。
按照惯例，我们应该将构造函数的首字母大写，以便区别于普通函数。
另外，如果没有使用new 操作符，因此 我们不是在创建一个新的对象。
这个函数调用与其他函数并没有区别。	
	
	1.构造函数
1.构造函数的函数名首字母大写    与一般函数进行区别；   
2.构造函数的调用方法与普通函数调用时有所区别  构造函数在调用时需通过new关键字进行调用
3.通过关键字this向实例中添加属性及方法；
4.构造函数中不可以出现return语句；
5.在new关键字调用时  后台自动返回出一个对象   不需要我们书写    从而实例为一个对象；
6.通过构造函数创建对象时   避免重复代码冗余；传递参数不同创建的对象也就有所不同；

	fgx("1.构造函数");
		//没有参数的构造函数
		function Dog1(){
			console.log("Dog1 this:",this);
			this.name2="狗狗";
			this.color2="white";
			this.say2=function(){
				console.log("汪!汪!");
			}
		}
		var d1=new Dog1();
		var d2=new Dog1();
		console.log("d1:",d1);
		console.log("d2:",d2);
		//调用方法
		d1.say2();
		d2.say2();
		通过instanceof操作符，我们可以测试一个对象是不是由某个指定的构造器函数所创建的。（返回的值是布尔类型的）
		确定该实例是否属于此构造函数  是返回true  否返回false；
		//instanceof
		console.log(d1 instanceof Dog1);
		console.log(d2 instanceof Dog1);
		
		//有参数的构造函数
		function Dog(name,color,str){
			console.log("Dog this:",this);
			this.name=name;
			this.color=color;
			this.say=function(){
				console.log(str);
			}
		}
		var d3=new Dog("小黑","white","小黑汪汪汪!");
		var d4=new Dog("小白","balck","小白汪汪汪!");
		console.log("d3:",d3);
		console.log("d4:",d4);
		//调用方法
		d3.say();
		d4.say();
		
		
		//instanceof
		console.log(d3 instanceof Dog);
		console.log(d4 instanceof Dog);
		
	2.返回函数对象的函数
工厂模式
	在工厂模式的函数中需声明一个对象；   
	必须有return语句  将声明的对象进行返回；
	
	//好处 ：避免重复代码的冗余    缺点  ： 无法确定实例属于哪一个工厂
	
		fgx("1.返回函数对象的函数");	
		function student(name,age,work){
			var obj={
				name:name,
				age:age,
				work:work
			}
			return obj;
		}
		var a=student("王东",18,"web前端");
		var b=student("王东2",16,"H5");
		console.log(a);
		console.log(b);
		console.log(a instanceof student);
		//false//好处 ：避免重复代码的冗余    缺点  ： 无法确定实例属于哪一个工厂
		console.log(b instanceof student);
		//false//好处 ：避免重复代码的冗余    缺点  ： 无法确定实例属于哪一个工厂
	
		</pre>
	</body>
</html>
